Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.11.2011, 12:03
Новичок на форуме
Отправить личное сообщение для evgen.minsk Посмотреть профиль Найти все сообщения от evgen.minsk
 
Регистрация: 21.11.2011
Сообщений: 5

Во время ajax запроса зависает цикл в функции обработчика
Скрипт передает post запрос для отправки e-mail заказа с данными о натяжном потолке и обрабатывает результат.
Вот примерно так (обрезал мало существенные детали) выглядит код:

$("#sale").click(function() {
	var Form = {
	 name: 'contactForm',
   	 cssClass: {'warning' : 'warning','error' : 'error', 'success' : 'success'},
  	 id: {'error' : 'error', 'success': 'success'},
  	 errorPrefix: 'Error',
  	 action: function(){return $('#' + this.name).attr('action')},
	 data: function(){return $('#' + this.name).serialize();},
         hideBox: function(el){$(el).slideUp('slow');},
	 showBox: function(el){$(el).slideDown('slow');}
	}
    	// Boxes to hide
    	var cssBoxes = '.' + Form.cssClass['warning'] + ',.' + Form.cssClass['error'] + ',.' + Form.cssClass['success'];

    	// hide all boxes if some exists
       $('#ajax_loader').ajaxStart(function(){$('#send').hide(); $(this).show() })
       $('#ajax_loader').ajaxComplete(function(){$('#send').show(); $(this).hide() })
       $('#' + Form.name).submit(function(){ 
	Form.hideBox(cssBoxes);		   
   	 	// Ajax request
	    $.post(Form.action(), Form.data(), function(p_data){
		var post_res = JSON.parse(p_data);
		if(post_res === true){
	        	Form.showBox('#' + Form.id['success']);
		    $('#contact_form form input[type="text"]').attr('value', '');
        	}else if(post_res === false){
			Form.showBox('#' + Form.id['error']);
		}else{
			Form.showBox('#'+Form.errorPrefix);
			for (var p_val in post_res){Form.showBox('#' + post_res[p_val] + Form.errorPrefix);}
		       }
	   });
    	   return false;
	});
});

В последнем цикле происходит зацикливание и не возникает .ajaxComplete
Если убрать этот цикл - все сработает, естественно, за исключением подсветки нужных div.

Если этот цикл в IE8 заканчивается, и дивы высвечивает, но не выполняется .ajaxComplete.
То в Chrome в этом цикле вообще происходит переполнение: после всех фактических данных массива, возникают какие-то не понятные отрезки кода, видные при отладке с помощью
alert(post_res[p_val]);
прямо в цикле. А потом вообще перегрузка ЦП до 100%!

Подскажите, в чем может быть дело? Где копать?
Могу опять для пробы вернуть отладочные сообщения.
Если это принципиально, все работает в UTF-8 и данные (в т.ч. содержание name и id свойств в полях ввода формы) содержат кириллицу.

Форма откроется при выборе в калькуляторе расчета стоимости натяжного потолка нескольких последовательных шагов и нажатии на батон "Заказать".

Последний раз редактировалось evgen.minsk, 21.11.2011 в 23:41. Причина: немного уточнил детали
Ответить с цитированием
  #2 (permalink)  
Старый 21.11.2011, 13:42
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

сделайте код более читаемым, возможно тогда кто-нибудь обратит на вас внимание.
__________________
.
Ответить с цитированием
  #3 (permalink)  
Старый 21.11.2011, 14:43
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #4 (permalink)  
Старый 21.11.2011, 23:33
Новичок на форуме
Отправить личное сообщение для evgen.minsk Посмотреть профиль Найти все сообщения от evgen.minsk
 
Регистрация: 21.11.2011
Сообщений: 5

Спасибо за совет. Подправил
Ответить с цитированием
  #5 (permalink)  
Старый 02.12.2011, 00:13
Новичок на форуме
Отправить личное сообщение для evgen.minsk Посмотреть профиль Найти все сообщения от evgen.minsk
 
Регистрация: 21.11.2011
Сообщений: 5

Парни с Quard Core Extreme в голове!
Неужели это непосильная задача???
Ответить с цитированием
  #6 (permalink)  
Старый 08.12.2011, 20:31
Новичок на форуме
Отправить личное сообщение для evgen.minsk Посмотреть профиль Найти все сообщения от evgen.minsk
 
Регистрация: 21.11.2011
Сообщений: 5

up!
Ответить с цитированием
  #7 (permalink)  
Старый 08.12.2011, 20:58
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

$('#contactForm').submit(function(){
    $('.warning, .error, .success').slideUp('slow');

    $.ajax({
        url: $( this ).attr( 'action' ),
        data: $( this ).serialize(),
        type: 'post',
        dataType: 'json',
        success: function( data ) {
            if ( data === true ) {
                $('#success').slideDown('slow');
                $('#contact_form form input[type="text"]').val('');
            } else if ( data === false ) {
                $('#error').slideDown('slow');
            } else {
                $('#Error').slideDown('slow');
                for( var p_val in data ) {
                    $( '#' + data[ p_val ] + 'Error' ).slideDown('slow');
                }
            }
        },
        complete: function( xhr ) {
            // тут выполняй свой complete
        },
        error: function( xhr, status ) {
        }
    });

    return false;
});

Последний раз редактировалось devote, 08.12.2011 в 21:05.
Ответить с цитированием
  #8 (permalink)  
Старый 09.12.2011, 20:52
Новичок на форуме
Отправить личное сообщение для evgen.minsk Посмотреть профиль Найти все сообщения от evgen.minsk
 
Регистрация: 21.11.2011
Сообщений: 5

Сейчас попробую
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать loader во время ajax запроса? FRIE jQuery 17 08.10.2014 09:42
JQuery. Ajax. Глобальные функции Harvey jQuery 5 31.08.2011 16:54
return функции с ajax запросом !? namo86 AJAX и COMET 2 19.01.2011 19:30
Проблема с событиями после ajax запроса Mirgorod AJAX и COMET 5 12.06.2010 18:24
Сохранение результата ajax запроса после нажатия 'back' gregOlsen AJAX и COMET 5 18.11.2009 12:23